(function() {
    'use strict';

    /**
     * 各种常用的方法存储在这里
     */
    angular.module('webApp')

    .factory('sku', ['$timeout', '$filter', 'md5', '$sce', 'helper', 'dataService',
        function($timeout, $filter, md5, $sce, helper, dataService) {


            //sku 入参
            this.skuRuCan = function(skus) {
                // console.error("skuRuCan-->", skus);

                // 先遍历剔除掉value是空的数据
                var skus = this.removeEmptyData(skus);
                var newSkus = this.skuPaiXu(skus);

                // console.error("newSkus-->", newSkus);
                return newSkus;
            }

            //剔除空数据
            this.removeEmptyData = function(skus) {
                var sku = clone(skus);

                _.map(sku, function(d, k) {
                    if (d) {
                        // console.log("d.values--->", d.values, _.size(d.values));
                        if (_.size(d.values) > 1) {
                            _.map(d.values, function(isd, isk) {
                                // console.log("isd---->", isd, isk);
                                if (!isd.value) {
                                    delete sku[k].values[isk];
                                } else {
                                    //把英文的冒号替换成中文冒号
                                    isd.value = isd.value.replace(/:/g, '：');
                                }
                            });
                        } else {
                            sku.splice(k, 1);
                        }
                    } else {
                        
                        sku.splice(k, 1);
                    }
                });
                return sku;
            }

            //sku 排序
            this.skuPaiXu = function(skus) {
                //获取最大的pid
                var maxPid = _.max(skus, 'pid').pid * 10;
                // console.log("maxPid--->", maxPid);

                //获取属性值最大的id
                var a = [];
                _.map(skus, function(sku) {
                    // console.log("sku--->", sku);
                    if (sku) {
                        _.map(sku.values, function(son) {
                            a.push(son);
                        });
                    }
                });

                var maxId = _.max(a, 'id').id * 10;
                // console.log("maxId", maxId);

                for (var i in skus) {
                    maxPid++;
                    if (!skus[i].pid) {
                        skus[i].pid = maxPid;
                    }
                    for (var j in skus[i].values) {
                        maxId++;
                        if (!skus[i].values[j].id) {
                            skus[i].values[j].id = maxId;
                        }
                    }
                }
                // console.log("新排序的sku-->", skus);

                return this.initData(skus);
            }

            //增加sku属性
            this.addNewSkus = function(itemSkuData, itemData, olddata) {
//                 console.error("addNewSkus入参-->", itemSkuData, itemData, olddata);
                var c = [];
                if (itemData) {
                    // console.log("----------------sdfsdfs", itemData, oldDa);
                    var b = [];

                    var skusData = clone(itemData);
                    // console.log("dslkfjsldfsd", skusData.skus);

                    for (var j in skusData.skus) {
                        var sku = _.compact(skusData.skus[j].sku_properties.split(";"));
                        var sku_id = "";
                        // console.error("sku", sku);
                        for (var i = 0; i < sku.length; i++) {
                            var a1 = sku[i].split(":");
                            if (!sku_id) {
                                sku_id = a1[0] + ":" + a1[1];
                            } else {
                                sku_id = sku_id + ";" + a1[0] + ":" + a1[1];
                            }
                        }
                        sku_id=sku_id.replace(/\s+/g,"");
                        c[sku_id] = skusData.skus[j];
                    }
                }
//                 console.error("cccc===--->", c);

                var a = {};
                var oldDa = clone(olddata);
                for (var i in itemSkuData) {
//                     console.error("aaaaa===--->", c[i],i);
                    if (c && c[i]) {
//                         console.error("a1===--->", i);
                        //编辑时，sku的价格和库存，用户修改了，就使用修改 的，没有修改就是数据库的
                        a[i] = c[i];
                        a[i].sku_price = oldDa[i] ? oldDa[i].sku_price : c[i].sku_price;
                        a[i].sku_stocks = oldDa[i] ? oldDa[i].sku_stocks : c[i].sku_stocks;
                        a[i].barcode = oldDa[i] ? oldDa[i].barcode : c[i].barcode;
                    } else {
//                         console.error("a2===--->", i);
                        a[i] = {
                            sku_outer_id: "" + random(11111, 99999),
                            sku_properties: itemSkuData[i].sku_properties,
                            sku_price: 1,
                            sku_stocks: 1,
                            status_id: 1,
                            barcode: "" + random(11111, 99999),
                            imgurl: "",
                        };
                        if (oldDa && oldDa[i]) {
                            //如果修改过sku价格 和库存，应该对应的修改
                            a[i].sku_price = oldDa ? oldDa[i].sku_price : 1;
                            a[i].sku_stocks = oldDa ? oldDa[i].sku_stocks : 1;
                            a[i].barcode = oldDa ? oldDa[i].barcode : 1;
                        }
                    }
                }

//                 console.error("sku===--->", a);
                return a;
            }

            //打折商品公司数据
            this.addDazheOtherSkus = function(itemSkuData, dazheData) {
                var c = [];

                for (var j in itemSkuData) {
                    var sku = _.compact(itemSkuData[j].sku_properties.split(";"));
                    var sku_id = "";
                    for (var i = 0; i < sku.length; i++) {
                        var a1 = sku[i].split(":");
                        if (!sku_id) {
                            sku_id = a1[0] + ":" + a1[1];
                        } else {
                            sku_id = sku_id + ";" + a1[0] + ":" + a1[1];
                        }
                    }

                    itemSkuData[j].dazhe = {};

                    if (dazheData) {
                        // console.error("dazheData[itemSkuData[j].sku_id].discount", dazheData, itemSkuData[j].sku_id, dazheData[itemSkuData[j].sku_id]);
                        if (dazheData[itemSkuData[j].sku_id]) {
                            itemSkuData[j].dazhe.discount = dazheData[itemSkuData[j].sku_id].discount;
                            itemSkuData[j].dazhe.disprice = dazheData[itemSkuData[j].sku_id].disprice;
                            itemSkuData[j].dazhe.type_id = dazheData[itemSkuData[j].sku_id].type_id;
                            itemSkuData[j].dazhe.id = dazheData[itemSkuData[j].sku_id].id;
                        } else {
                            itemSkuData[j].dazhe = false;
                        }
                        // console.error("itemSkuData",itemSkuData[j]);
                    } else {
                        itemSkuData[j].dazhe.discount = 100;
                        itemSkuData[j].dazhe.disprice = 0;
                        itemSkuData[j].dazhe.type_id = 1;
                    }
                    c[sku_id] = itemSkuData[j];
                    c[sku_id].sku_yuan_price = c[sku_id].sku_price;
                }
                // console.error("cccccccccccccccccc",c);
                return c;
            }

            //添加规格
            this.addNorms = function(itemSkuData) {
                var len = itemSkuData.length;
                var a = {
                    pid: 0,
                    name: "默认规格"+len,
                    values: [{
                        id: 0,
                        value: len
                    }]
                };
                itemSkuData.push(a);
                return itemSkuData;
                // return this.skuPaiXu(itemSkuData);
            }

            //判断规格名称是否重复，并添加name
            this.checkNormsName = function(itemSkuData, name, key) {
                if (name) {
                    _.map(itemSkuData, function(d, k) {
                        // console.log("d,k", d, k);
                        if (d.name == name && key !== k) {
                            helper.myAlert(name + "该规格名称已经存在");
                            return;
                            itemSkuData[key].name = "";
                        }
                    });
                }
                // console.log("itemSkuData--->", itemSkuData);
                return itemSkuData;
            }

            //删除规格
            this.delNorms = function(index) {
                var sku = this.skuRuCan();
                sku.splice(index, 1);
                // console.log("sku---->", sku);
                return sku;
            }

            //增加属性值
            this.addAttribute = function(itemSkuData, name, pid, key) {
                // var sku = this.skuRuCan();

                // 选中时 增加新的 数据
                _.map(itemSkuData, function(d, k) {
                    if (key >= 0) {
                        if (!d.values[key + 1]) {
                            if ((d.name == name) && (pid == d.pid)) {
                                d.values.push({
                                    id: 0,
                                    value: "",
                                    mark: ""
                                });
                            }
                        }
                    } else {
                        if ((d.name == name) && (pid == d.pid)) {
                            d.values.push({
                                id: 0,
                                value: "",
                                mark: ""
                            });
                        }
                    }
                });
                // console.log("skuNew--->", itemSkuData);
                return itemSkuData;
            }

            //删除属性值
            // attribute

            this.initData = function(skus) {
                var a = [];
                for (var i in skus) {
                    var b = [];
                    for (var j in skus[i].values) {
                        var c = {
                            "pid": skus[i].pid,
                            "name": skus[i].name,
                            "id": skus[i].values[j].id,
                            "value": skus[i].values[j].value
                        };
                        b.push(c);
                    }
                    a.push(b);
                }
                var data = this.doExchange(a);
                return this.doInitData(data);
            }

            this.doExchange = function(arr) {
                var len = arr.length;
                // 当数组大于等于2个的时候
                if (len >= 2) {
                    // 第一个数组的长度
                    var len1 = arr[0].length;
                    // 第二个数组的长度
                    var len2 = arr[1].length;
                    // 2个数组产生的组合数
                    var lenBoth = len1 * len2;
                    //  申明一个新数组
                    var items = new Array(lenBoth);
                    // 申明新数组的索引
                    var index = 0;
                    for (var i = 0; i < len1; i++) {
                        for (var j = 0; j < len2; j++) {
                            if (arr[0][i] instanceof Array) {
                                items[index] = arr[0][i].concat(arr[1][j]);
                            } else {
                                items[index] = [arr[0][i]].concat(arr[1][j]);
                            }
                            index++;
                        }
                    }

                    var newArr = new Array(len - 1);
                    for (var i = 2; i < arr.length; i++) {
                        newArr[i - 1] = arr[i];
                    }

                    newArr[0] = items;
                    return this.doExchange(newArr);
                } else {
                    return arr[0];
                }
            }

            //最终需要的sku数据
            this.doInitData = function(data) {
                var abc = this.dealSkuData(data);
                // console.log("abc---->", abc);
                var sku_data = {};
                var a = {};
                var b = {};
                var data1 = clone(data);
                // console.log("data1-->", data1);
                for (var i in data1) {
                    var sku_id = "";
                    var sku_properties = "";
                    if (!_.isArray(data1[i])) {
                        sku_id = data1[i].pid + ":" + data1[i].id;
                        if (!b[sku_id]) {
                            data1[i].sid = sku_id;
                            data1[i].snum = abc[sku_id];
                            sku_properties = data1[i].pid + ":" + data1[i].id + ":" + data1[i].name + ":" + data1[i].value + ";";
                            b[sku_id] = 1;
                        }
                        data1[i] = [data1[i]];
                    } else {
                        for (var j in data1[i]) {
                            if (!sku_id) {
                                sku_id = data1[i][j].pid + ":" + data1[i][j].id;
                                sku_properties = data1[i][j].pid + ":" + data1[i][j].id + ":" + data1[i][j].name + ":" + data1[i][j].value + ";";
                            } else {
                                sku_id = sku_id + ";" + data1[i][j].pid + ":" + data1[i][j].id;
                                sku_properties = sku_properties + data1[i][j].pid + ":" + data1[i][j].id + ":" + data1[i][j].name + ":" + data1[i][j].value + ";";
                            }
                            if (!b[sku_id]) {
                                data1[i][j].sid = sku_id;
                                data1[i][j].snum = abc[sku_id];
                                b[sku_id] = 1;
                            }
                        }
                    }
                    sku_data[sku_id] = { "id": sku_id, "data": data1[i], "sku_properties": sku_properties };
                }

                // console.log("sku_data", sku_data);
                return sku_data;
            }

            this.rowspanCount = function(sku_data) {
                var num = this.dealSkuData(sku_data);
            }

            this.dealSkuData = function(data) {
                var a = {};
                for (var i in data) {
                    var b = "";
                    if (!_.isArray(data[i])) {
                        b = data[i].pid + ":" + data[i].id;
                        if (!a[b]) {
                            a[b] = 1;
                        } else {
                            a[b]++;
                        }
                    } else {
                        for (var j in data[i]) {
                            var c = data[i][j];
                            if (!b) {
                                b = c.pid + ":" + c.id;
                            } else {
                                b = b + ";" + c.pid + ":" + c.id;
                            }

                            if (!a[b]) {
                                a[b] = 1;
                            } else {
                                a[b]++;
                            }
                        }
                    }
                }
                return a;
            }

            /*imgurl:"https://g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/188620136570582931/TB28ruZgVXXXXbuXXXXXXXXXXXX_!!12368862-0-saturn_solar.jpg_230x230.jpg"
            sku_outer_id:"9815"
            sku_price:1
            sku_properties:"0:0:颜色:红色;"
            sku_stocks:2*/

            /*imgurl:"https://g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/188620136570582931/TB28ruZgVXXXXbuXXXXXXXXXXXX_!!12368862-0-saturn_solar.jpg_230x230.jpg"
            sku_outer_id:"2761"
            sku_price:1
            sku_properties:"0:0:颜色:红色;0:0:大小:大;"
            sku_stocks:2*/

            //请求api前公司数据
            // itemSkuData[sku数据] newSkus[价格，库存等]
            this.finishSkuData = function(itemSkuData, newSkus, item_id, cb) {
                var skus = [];
                for (var g in newSkus) {
                    newSkus[g].sku_properties = itemSkuData[g].sku_properties;
                    skus.push(newSkus[g]);
                }

                // console.log("api请求前第一次公司的sku---->", skus);

                for (var i in skus) {
                    if (!skus[i].sku_outer_id && !skus[i].sku_price && !skus[i].sku_stocks) {
                        skus.splice(i, 1);
                    }
                }

                return this.doFinishSkuData(skus, item_id, cb);
            }

            this.doFinishSkuData = function(skus, item_id, cb) {
                // console.error("ddddddddddddddddddddddddddddddddddddddddddddddddd---->", skus,item_id);
                var skusData = clone(skus);

                var sdata = skusData;

                async.mapSeries(sdata, function(dss, cb) {
                    var data = dss.sku_properties;
                    var strs = data.split(";");
                    strs = strs.filter(function(n) {
                        return n
                    });
                    if (strs) {
                        var sevt = '';
                        async.mapSeries(strs, function(dd, cb1) {
                            var svbtrs = dd.split(":");
                            dataService.itemSkuTypeGet({
                                query : {
                                    name: svbtrs[2],
                                    item_id: item_id ? item_id : "1"
                                }
                            }).then(function(r) {
                                if (r.sku_types[0])
                                {
                                    svbtrs[0] = r.sku_types[0].id;
                                    jyvalue();
                                }
                                else
                                {
                                    dataService.itemSkuTypeGet({
                                        query: {
                                            id: svbtrs[0],
                                            item_id: item_id ? item_id : "1"
                                        }
                                    }).then(function(vr1) {
                                        if (vr1.sku_types[0]) {
                                            dataService.itemSkuValueUpdate({
                                                id: parseInt(svbtrs[0]),
                                                name: svbtrs[2],
                                                item_id: item_id ? item_id : "1"
                                            }).then(function(isr) {
                                                jyvalue();
                                            });
                                        } else {
                                            dataService.itemSkuTypeAdd({
                                                name: svbtrs[2],
                                                item_id: item_id ? item_id : "1"
                                            }).then(function(isr) {
                                                svbtrs[0] = isr.id;
                                                jyvalue();
                                            });
                                        }
                                    });

                                }

                                function jyvalue() {
                                    dataService.itemSkuValueGet({
                                        query: {
                                            name: svbtrs[3],
                                            pid: svbtrs[0]
                                        }
                                    }).then(function(vr) {
                                        if (vr.sku_values[0]) {
                                            svbtrs[1] = vr.sku_values[0].id;
                                            sevt += svbtrs[0] + ":" + svbtrs[1] + ":" + svbtrs[2] + ":" + svbtrs[3] + ";";
                                            cb1(null);
                                        } else {
                                            dataService.itemSkuValueGet({
                                                query: {
                                                    id: svbtrs[1],
                                                    pid: svbtrs[0]
                                                }
                                            }).then(function(vr1) {
                                                if (vr1.sku_values[0]) {
                                                    dataService.itemSkuValueUpdate({
                                                        id: parseInt(svbtrs[1]),
                                                        name: svbtrs[3],
                                                        pid: svbtrs[0]
                                                    }).then(function(isr) {
                                                        sevt += svbtrs[0] + ":" + svbtrs[1] + ":" + svbtrs[2] + ":" + svbtrs[3] + ";";
                                                        cb1(null);
                                                    });
                                                } else {
                                                    dataService.itemSkuValueAdd({
                                                        pid: svbtrs[0],
                                                        name: svbtrs[3]
                                                    }).then(function(svbr) {
                                                        svbtrs[1] = svbr.id;
                                                        sevt += svbtrs[0] + ":" + svbtrs[1] + ":" + svbtrs[2] + ":" + svbtrs[3] + ";";
                                                        cb1(null);
                                                    });
                                                }
                                            });
                                        }
                                    });
                                }
                            });
                        }, function(e, d) {
                            dss.sku_properties = sevt;
                            cb(null)
                        })
                    } else {
                        cb(null);
                    }
                }, function(e, d) {
                    // $scope.derItemAdd(skus);  

                    // console.log("api请求之前第二次组装的sku数据--->", skusData);


                    if (cb)
                        cb(skusData);
                    // return skusData;
                })
            }

            this.updateSkuTypeItemid = function(skus, item_id, cb) {

                // console.error("修改对应的sku类型中itemid的值--->", skus);

                var skusData = clone(skus);

                var sdata = skusData;

                async.mapSeries(sdata, function(dss, cb) {
                    var data = dss.sku_properties;
                    var strs = data.split(";");
                    strs = strs.filter(function(n) {
                        return n
                    });
                    if (strs) {
                        async.mapSeries(strs, function(dd, cb1) {
                            var svbtrs = dd.split(":");
                            dataService.itemSkuTypeGet({
                                query: {
                                    id: svbtrs[0],
                                    name: svbtrs[2],
                                    item_id: item_id
                                }
                            }).then(function(r) {
                                if (!r.sku_types[0]) {
                                    dataService.itemSkuTypeUpdate({
                                        id: parseInt(svbtrs[0]),
                                        name: svbtrs[2],
                                        item_id: item_id
                                    }).then(function(isr) {
                                        cb1(null);
                                    });
                                } else {
                                    cb1(null);
                                }
                            });
                        }, function(e, d) {
                            cb(null)
                        })
                    } else {
                        cb(null);
                    }
                }, function(e, d) {
                    if (cb)
                        cb(skusData);
                })
            }

            return this;
        }
    ]);
})();